package com.southwind.mmall002.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.southwind.mmall002.entity.Product;
import com.southwind.mmall002.entity.ProductCategory;
import com.southwind.mmall002.mapper.ProductCategoryMapper;
import com.southwind.mmall002.mapper.ProductMapper;
import com.southwind.mmall002.service.ProductCategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.southwind.mmall002.service.ProductService;
import com.southwind.mmall002.vo.ProductCategoryVO;
import com.southwind.mmall002.vo.ProductsVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 周恒
 * @since 2021-10-13
 */
@Service
public class ProductCategoryServiceImpl extends ServiceImpl<ProductCategoryMapper, ProductCategory> implements ProductCategoryService {


    @Autowired
    private ProductCategoryMapper productCategoryMapper;

    @Resource
   private ProductMapper productMapper;
    @Override
    public List<ProductCategoryVO> getAllProductCategoryVO() {
        //查寻到的所有结果都放到目标集合
//        List<ProductCategory> productCategoryList = productCategoryMapper.selectList(null);
//        List<ProductCategoryVO> productCategoryVOList = new ArrayList<>();
//
//        for (ProductCategory productCategory : productCategoryList){
//            ProductCategoryVO productCategoryVO = new ProductCategoryVO();
        //BeanUtils.copyProperties：属性复制
//            BeanUtils.copyProperties(productCategory,productCategoryVO);
////            productCategoryVO.setId(productCategory.getId());
////            productCategoryVO.setName(productCategory.getName());
//            productCategoryVOList.add(productCategoryVO);
//        }

        //一级分类集合levelOne
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("type",1);
        List<ProductCategory> levelOne = productCategoryMapper.selectList(wrapper);
        //一级集合对应的二级集合
//        for (ProductCategory productCategory : levelOne) {
//            wrapper = new QueryWrapper();
//            wrapper.eq("type",2);
//            wrapper.eq("parent_id",productCategory.getId());
//            List<ProductCategory> levelTwo = productCategoryMapper.selectList(wrapper);
//            //生成对应的二级Vo集合
//            List<ProductCategoryVO> levelTwoVO = levelTwo.stream().map(e -> new ProductCategoryVO(e.getId(),e.getName())).collect(Collectors.toList());
//}
        /** 得到vo类集合
         * 方法一
        //创建一级 levelOneVO集合
        List<ProductCategoryVO> levelOneVO = new ArrayList<>();
        //for遍历集合levelOne 得到levelOneVO集合数据
        for (ProductCategory productCategory : levelOne) {
            //创建一个productCategoryVO集合用于暂时存放遍历得到的数据
            ProductCategoryVO productCategoryVO = new ProductCategoryVO();
            BeanUtils.copyProperties(productCategory,productCategoryVO);
            //将productCategoryVO集合中的数据添加到levelOneVO集合中
            levelOneVO.add(productCategoryVO);
        }
         */
        //方法二 使用stream流的方式直接生成一级 levelOneVO集合
        //e对应的是集合levelOne中的ProductCategory对象
        //new ProductCategoryVO 利用构造器生成VO对象
        List<ProductCategoryVO> levelOneVO = levelOne.stream().map(e -> new ProductCategoryVO(e.getId(),e.getName())).collect(Collectors.toList());
//        levelOneVO.get(0).setBannerTmg("banner1.png");
//        levelOneVO.get(0).setTopImg("top1.png");
        for (int i = 0; i<levelOneVO.size();i++){
            levelOneVO.get(i).setBannerTmg("/images/banner"+i+".png");
            levelOneVO.get(i).setTopImg("/images/top"+i+".png");
            wrapper = new QueryWrapper();
            wrapper.eq("categorylevelone_id",levelOneVO.get(i).getId());
            List<Product> productList = productMapper.selectList(wrapper);
            List<ProductsVo> productsVoList = productList.stream()
                    .map(e -> new ProductsVo(e.getId(),e.getName(),e.getPrice(),e.getFileName(),e.getStock())).collect(Collectors.toList());
            levelOneVO.get(i).setProductsVoList(productsVoList);
        }
        for (ProductCategoryVO levelOneProductCategoryVO : levelOneVO) {
            wrapper = new QueryWrapper();
            wrapper.eq("type", 2);
            wrapper.eq("parent_id", levelOneProductCategoryVO.getId());
            List<ProductCategory> levelTwo = productCategoryMapper.selectList(wrapper);
            //生成对应的二级Vo集合
            List<ProductCategoryVO> levelTwoVO = levelTwo.stream().map(e -> new ProductCategoryVO(e.getId(), e.getName())).collect(Collectors.toList());
            levelOneProductCategoryVO.setChildren(levelTwoVO);
            for (ProductCategoryVO levelTwoProductCategoryVO : levelTwoVO) {
                wrapper = new QueryWrapper();
                wrapper.eq("type", 3);
                wrapper.eq("parent_id", levelTwoProductCategoryVO.getId());
                List<ProductCategory> levelThree = productCategoryMapper.selectList(wrapper);
                //生成对应的三级Vo集合
                List<ProductCategoryVO> levelThreeVO = levelThree.stream().map(e -> new ProductCategoryVO(e.getId(), e.getName())).collect(Collectors.toList());
                levelTwoProductCategoryVO.setChildren(levelThreeVO);

            }


        }
            /**

            //二级分类集合
        wrapper = new QueryWrapper();
        wrapper.eq("type",2);
        List<ProductCategory> levelTwo = productCategoryMapper.selectList(wrapper);

        //三级分类集合
        wrapper = new QueryWrapper();
        wrapper.eq("type",3);
        List<ProductCategory> levelThree = productCategoryMapper.selectList(wrapper);


             *
             */
            return levelOneVO;
    }
}
